Como implementar unit testing en Java utilizando maven
Para realizar los test usaremos Junit, asi que tenemos que incluir la siguiente dependencia en el pom.xml:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
NOTA: En una aplicacion con Spring no necesitamos esta dependencia para los tests, ya que Spring tiene una dependencia propia para los tests.
NOTA2: Cuando creamos una aplicacion con maven por defecto ya se incluye esta dependencia en el pom.xml
AÑADIR ENLACE A TESTS DE SPRING
Para implementar Unit Test en una aplicacion java creamos un archivo de test dentro de nuestra carpeta de tests, en nuestro caso seria:
test/java/com/example
En nuestro caso tenemos en nuestro codigo la siguiente funcion definida:
package com.example;
public class App
{
public static void main( String[] args )
{
System.out.println( sum(2,3));
}
public static int sum(int a, int b){
return a + b;
}
}
Y en nuestros tests tenemos definido el siguiente codigo
package com.example;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class AppTest
{
@Test
public void test_funcion_sum()
{
assertTrue( (App.sum(3,2) == 5));
}
}
En este ejemplo tenemos definida una funcion que suma dos numeros, la funcion sum y a mayores tenemos un test para probar dicha funcion test_funcion_sum
Los tests van precedidos por la anotacion @Test, en un archivo podemos tener varios tests, por ejemplo:
@Test
public void test_funcion_sum()
{
assertTrue( (App.sum(3,2) == 5));
}
@Test
public void test_funcion_sum_negative()
{
assertTrue( (App.sum(-3,2) == -1));
}
Cuando escribimos un test la primera vez que lo vayamos a ejecutar tenemos que lanzarlo con el comando mvn test (ya sea desde la consola o desde el IDE de Visual Code), esto se debe a que los tests primero se tienen que compilar, si intentamos ejecutarlos directamente desde el Visual Code, no se ejecutaran porque el archivo .class de los tests no esta creado
Entonces, primero compilamos los tests con mvn test(esto ya los ejecutará directamente)
y una vez esten compilados ya los podemos ejecutar directamente desde el visual code
Aunque si queremos podemos ejecutarlos siempre usando el mvn test
Si queremos ejecutar los test en un project simple donde no tengamos maven podemos hacerlo de la siguientes maneras:
Para ejecutar los test sin maven desde VScode solo tenemos que añadir las siguientes librerías:
Si usamos versiones de liberías incompatibles se nos puede dar el siguiente error:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
En mi caso era usando junit-4.13.2.jar y hamcrest-core-2.2.jar.
Para ejcutar los test se hace usando la propia interfaz del VSCode:
Partimos de una estructura de carpetas tal que así:
NOTA: es importante saber esto para poner en el classpath las rutas correctas.
Primero tenemos que compilar la clase de test:
javac -cp lib\junit-4.12.jar;src src\test\AppTest.java
Despues ejecutamos los test con el siguiente comando:
java -cp lib\junit-4.12.jar;lib\hamcrest-core-1.3.jar;src org.junit.runner.JUnitCore test.AppTest
Unit Test | maven | java